﻿/*----------------------------------------------------------------
// 公司名称：公司名称
// 
// 产品名称：Gaf
//
// 创 建 人：netcasewqs
// 创建日期：2022/3/4
// 邮    箱：netcasewqs@qq.com
//
// Copyright (C) 2022 Gaf，保留所有权利。
//
//----------------------------------------------------------------*/

namespace Gaf;

/// <summary>
/// 
/// </summary>
public class GafOptions
{
    /// <summary>
    /// 插件目录
    /// </summary>
    [DefaultValue("addins")]
    public string AddinsDirectory { get; set; } = Constants.AddinsDirectory;

    /// <summary>
    /// 插件Assembly 加载模式
    ///     1. LoadFromStream ：从流中加载
    ///     2. LoadFromAssemblyPath： 从文件中加载
    /// </summary>
    [DefaultValue(AddinAssemblyLoadMode.LoadFromStream)]
    public AddinAssemblyLoadMode AddinAssemblyLoadMode { get; set; } = AddinAssemblyLoadMode.LoadFromStream;


    /// <summary>
    /// 插件是否支持隔离，默认支持
    /// </summary>
    [DefaultValue(true)]
    public bool AddinIsolation { get; set; } = true;

    /// <summary>
    /// 插件是否可以卸载
    /// </summary>
    [DefaultValue(true)]
    public bool AddinCanUninstall { get; set; } = false;

    /// <summary>
    /// 插件包后缀名，默认: null
    /// </summary>
    public string? PackageSuffixName { get; set; }

    /// <summary>
    /// 插件格式类型：Lite、Directory
    /// </summary>
    [DefaultValue(AddinPackageFormat.Lite)]
    public AddinPackageFormat PackageFormat { get; set; } = AddinPackageFormat.Lite;

    internal bool IsGpk =>  !string.IsNullOrEmpty(PackageSuffixName);

    /// <summary>
    /// 托管公共Libs目录.默认：libs
    /// </summary>
    [DefaultValue(Constants.ManagedLibsDirectory)]
    public string ManagedLibsDirectory { get; set; } = Constants.ManagedLibsDirectory;

    /// <summary>
    /// 非托管公共Libs目录.默认：x64,x86
    /// </summary>
    [DefaultValue(Constants.UnmanagedLibsDirectory)]
    public string UnmanagedLibsDirectory { get; set; } = Constants.UnmanagedLibsDirectory;

    /// <summary>
    /// 插件最大启动级别(大于该启动级别的都不能启动)
    /// </summary>
    public uint? MaxStartLevel { get; set; }

    /// <summary>
    /// 禁用的插件列表
    /// </summary>
    public string[]? DisableAddins { get; set; }

    /// <summary>
    /// 是否启用dll 循环冗余检查，默认不检查
    /// </summary>
    public bool EnableRedundantDllFileCheck { get; set; }

    /// <summary>
    /// 是否在退出时自动删除插件解压缩后的目录和文件，默认：true
    /// </summary>
    [DefaultValue(true)]
    public bool AutoDeleteUncompressDirectory { get; set; } = true;

    /// <summary>
    /// 根据项目的需要，有时在启动一个Bundle的时候出现异常了，那么需要检查框架的配置是否可以自动退出,默认：true
    /// </summary>
    [DefaultValue(true)]
    public bool AutoExitOnStartAddinError { get; set; } = true;

    /// <summary>
    /// 是否启用Trace 日志,默认：true
    /// </summary>
    [DefaultValue(true)]
    public bool Trace { get; set; } = true;

    /// <summary>
    /// 是否启用Trace 日志,默认：true
    /// </summary>
    [DefaultValue("gaf.log")]
    public string TraceFile { get; set; } = "gaf.log";

    /// <summary>
    /// 是否启用Trace 日志,默认：true
    /// </summary>
    [DefaultValue( TraceLevel.INF)]
    public TraceLevel TraceLevel { get; set; } =  TraceLevel.INF;
}